科技始終來自於惰性,因為想要偷懶,希望能把麻煩事一次解決,所以自動化一直是我很感興趣的題目。也因為自己是名 Web 工程師,所以對於網路的自動化也就特別上心,為了讓自己有更多的時間,所以也就常常自幹很多小工具、小服務和設計便利的流程,而爬蟲,是我最喜歡的一個挑戰。
會挑選爬蟲這個主題,主要是因為每個人平常日常都很習慣地在網路上獲得資訊和操作動作,但其實每天做的動作都很重複,而我們應該要去主動創造出可以節省我們時間的工具,不管是幫助自己或是幫助其他人。
在玩爬蟲的過程當中,除了必須具備網路的基本知識外,常常需要去換位思考,把自己當成是開發者,猜測開發過程中的邏輯和流程,找尋蛛絲馬跡,利用各種工具,在最適合的路徑和角度切入。爬蟲也不是一個新的玩意,他已存在許久,但隨著時代演進,網頁越來越華麗,各種網頁製作方式和技巧幾乎一年一大變,所以爬蟲也持續有新的挑戰與課題。
對我來說,爬蟲不只是抓抓資料,也不僅是自動化一些重複的流程,更是一種諜對諜的挑戰。從小我就對駭客有很大的憧憬,只是長大以後沒學好,不是那塊料,但接觸爬蟲之後,似乎多多少少能滿足一點點小時候的願望。
這次的鐵人挑戰賽,會透過 Node.js 實作,寫下我這幾年中所學習到的心得與技巧,我會分為兩個部分做介紹,第一個部分會介紹基礎知識,包含爬蟲原理、思考模式、常用工具、抓取技巧;第二個部分會以實作的方式,透過實作爬蟲的過程,去更深入的了解和體會各種應用技巧。
目前已經列出主題大綱,包含 PTT 爬蟲、購票系統、社群網站、資源網站、免空...。當然,若有更好的題目或有興趣的題目,可以留言給我,我也會將這些當作其中的主題。
在整個玩爬蟲的過程中,抓取資料其實只是其中一環,抓取資料固然重要,但如何應用資料也是同等重要。在我們取得資料後,往往會有一系列的處理動作,例如最單純的將資料拋給下一站、觸發通知、自動化、轉換成 API 再應用等等。不過礙於篇幅,我們在這個系列並不會實做這些事情,只會提及後續相關應用,若有興趣的夥伴,也很歡迎自行取用裡面的任何程式碼和任何文字內容再加以加工應用,記得註記就好。
大神,你有沒有打算說明一下,如何在手機app上面,跟電腦瀏覽器一樣透過F12,看到封包內容?
我應該不會包含到那部分,在這邊簡單說一下,基本上 chrome 和 safari 都能在手機和電腦連線時用電腦打開 dev tool,另外手機也能用 proxy server 來檢測 request,不過遇到 https 那又是另外一種玩法了。